home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / —‹Œêsrc.lzh / help.c < prev    next >
C/C++ Source or Header  |  1992-10-23  |  3KB  |  152 lines

  1. #include    "3DDEF.H"
  2. #include    "GLOBAL.H"
  3. #include    "FORWARD.H"
  4. #include    "XCODE.H"
  5. #include    "doslib.h"
  6.  
  7. #define    KIIRO_REV    10    /* 黄色のリバース */
  8. #define    MIZU_REV    9    /* 水色のリバース */
  9.  
  10. extern UBYTE argv0[MAXLINE];
  11.  
  12. void
  13. help()
  14. {
  15.     STR hp;
  16.     UBYTE hpbody[MAXLINE];
  17.     FILE *hfp;
  18.     struct NAMECKBUF inf;
  19.     int size1,size2;
  20.     int flag;
  21.  
  22.     if ((hp = (STR)getenv("TWPATH")) || (hp = (STR)getenv("twpath"))) {
  23.                             /* 環境指定があった */
  24.         strcpy(hpbody,hp);
  25.         strcat(hpbody,"TW.HLP");
  26.     }
  27.  
  28.     if (hfp = fopen((char *)hpbody,"rb")) {    /* HLP ファイルがあった */
  29.     } else {    /* そこにないなら、TW.X のあった所を捜す */
  30.         NAMECK(argv0,&inf);
  31.         strncpy(hpbody,inf.drive,2);
  32.         hpbody[2] = EOS;
  33.         strcat(hpbody,inf.path);        /* パスを得る */
  34.         strcat(hpbody,"TW.HLP");
  35.         if (hfp = fopen((char *)hpbody,"rb")) {    /* HLP ファイルがあった */
  36.         } else {    /* そこにないなら、カレントを捜す */
  37.             hfp = fopen("TW.HLP","rb");
  38.         }
  39.     }
  40.  
  41.     if (!hfp) {
  42.         etc_beep();
  43.         error("[ヘルプファイルが見つかりません]");
  44.         return;
  45.     }
  46.  
  47.     /* 最初の ! まで読み飛ばす */
  48.     flag = 0;
  49.     while(1) {
  50.         UBYTE w[MAXLINE];
  51.  
  52.         if (feof(hfp)) {
  53.             break;
  54.         }
  55.         fgets(w,MAXLINE,hfp);
  56.         if (!strcmp(w,"!\x0d\x0a")) {
  57.             flag = 1;
  58.             break;
  59.         }
  60.     }
  61.     if (!flag) {    /* ! がない */
  62.         error("[ヘルプファイルが異常です]");
  63.         return;
  64.     }
  65.  
  66.     size1 = ftell(hfp);
  67.     if (CMDMOD) {    /* ED モードである */
  68.         flag = 0;
  69.         while(1) {    /* 次の ! まで読み飛ばす,,, */
  70.             UBYTE w[MAXLINE];
  71.  
  72.             if (feof(hfp)) {
  73.                 break;
  74.             }
  75.             fgets(w,MAXLINE,hfp);
  76.             if (!strcmp(w,"!\x0d\x0a")) {
  77.                 flag = 1;
  78.                 break;
  79.             }
  80.         }
  81.         if (!flag) {    /* ! がない */
  82.             error("[ヘルプファイルが異常です]");
  83.             return;
  84.         }
  85.         size2 = ftell(hfp) - size1;
  86.         fseek(hfp,size1,SEEK_SET);    /* ! の後へもどる */
  87.         help0(hfp,size2-3);
  88.     } else {
  89.         fseek(hfp,0,SEEK_SET);        /* 先頭へシークする */
  90.         help0(hfp,size1-3);
  91.     }
  92. }
  93.  
  94. void
  95. help0(FILE *fp,int size)
  96. {
  97.     char HELP_MESS[size];
  98.     register char *p;
  99.     register int y;
  100.     register UINT c;
  101.     char s[MAXLINE];
  102.  
  103.     fread(HELP_MESS,1,size,fp);
  104.     HELP_MESS[size] = EOS;
  105.  
  106.     p = HELP_MESS;
  107.     while(1) {
  108.         if (!*p) {
  109.             p = HELP_MESS;
  110.         }
  111. /*
  112. window0();
  113. printf("[%x][%x][%x][%x][%x]",p[0],p[1],p[2],p[3],p[4]);
  114. binkey();
  115. */
  116.         init_clear_screen();
  117. /*        etc_func_off();*/
  118.         y = 0;
  119.         while(1) {
  120.             if ((p[0] == '-') && (p[1] == '\x0d') && (p[2] == '\x0a')) {
  121.                 p += 3;
  122.                 B_LOCATE(0,YWIDTH0-2);
  123. /*                etc_color(KIIRO_REV);*/
  124. B_PRINT("\t\t\x1b[32m([HELP], ^G or ESC を押すと元の編集画面に戻ります)\x1b[m");
  125. /*                etc_color(NORMAL);*/
  126.                 etc_while_fep_qxf();    /* 離されるまで待つ */
  127.                 c = fep_INKEY_wait();
  128.                 if ((c == FEP_HELP_CODE) || (c == 'G'-'@') || (c == '\x1b')) {
  129. /*                    ctrl_l();*/
  130. /*                    etc_func_on();*/
  131.                     return;
  132.                 }
  133.                 break;
  134.             } else {
  135.                 p = help_sub(p,s);
  136.                 B_LOCATE(0,y++);
  137.                 B_PRINT(s);
  138.             }
  139.         }
  140.     }
  141. }
  142.  
  143. char *
  144. help_sub(char *p, char *s)
  145. {
  146.     while(*p != '\n') {
  147.         *s++ = *p++;
  148.     }
  149.     *s = EOS;
  150.     return(++p);
  151. }
  152.